package com.smart.mattress.account.server;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import com.alibaba.fastjson.JSONObject;
import com.smart.mattress.common.model.account.UserInfo;

/**
 * 用户信息服务
 * Created by rencong on 17/3/10.
 */
public interface UserInfoService {


    /**
     * 用户登录
     * @param email 邮箱
     * @param password 密码
     * @return 登录成功token,登录失败error,用户不存在noUser
     */
    public JSONObject login(String email,String password);
    
    
    /**
     * 用户注册
     * @param userInfo
     * @return 成功返回"success",失败返回"fail",用户已存在返回"repeat"
     */
    public String register(UserInfo userInfo);
    
    /**
     * 修改信息
     * @param userInfo
     * @return 成功返回true，失败返回false
     */
    public boolean modify(UserInfo userInfo);
    
    /**
     * 忘记密码
     * @param email
     * @return 返回true，成功发送验证码，false用户不存在
     */
    public boolean forget(String email,HttpServletRequest req);
    
    /**
     * 修改密码
     * @param userInfo
     * @return 成功返回true，失败返回false
     */
    public boolean modifyPwd(UserInfo userInfo);
    
    /**
     * 获用户的一些基础信息
     * @param token
     * @return
     */
    public UserInfo getInfo(String token);
    
    /**
     * 根据邮箱查询用户信息
     * @param email
     * @return
     */
    public UserInfo queryUser(String email);
    
    /**
     * 根据邮箱检查是否存在指定对象
     * @param email
     * @return 不存在返回true，存在返回false
     */
    public long checkExist(String email,Class infoClass,String collectionName);
    
    /**
     * 申请关注
     * @param token
     * @param email
     * @return 申请对象不存在：noUser，关注过：repeat，申请成功：success，失败：fail
     */
    public String applyConcern(String token,String email);
    
    /**
     * 处理申请
     * @param token
     * @param email
     * @param handle
     * @return 处理成功返回true，失败返回false,重复添加返回repeat
     */
    public String handleConcern(String token,String email,String handle);
    
    /**
     * 取消关注
     * @param token
     * @param email
     * @return 取消成功返回true，失败返回false
     */
    public boolean cancelConcern(String token,String email,String type);
    
    /**
     * 获取待批准信息
     * @param token
     * @return 有数据返回list，出错返回null
     */
    public List getWait(String token);
    
    /**
     * 获取我的关注信息
     * @param token
     * @return 有数据返回list，出错返回null
     */
    public List getMyConcern(String token);
    
    /**
     * 获取关注我的信息
     * @param token
     * @return 有数据返回list，出错返回null
     */
    public List getConcernMe(String token);
    
    /**
     * 根据token 查询用户信息
     * @param token
     * @param infoClass
     * @param collectionName
     * @return
     */
    public Object getInfoByToken(String token,Class infoClass,String collectionName);
    
    public void updateSuperAccount(String email);
}
